package com.yf.exam.modules.user.cert.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yf.exam.core.api.dto.PagingReqDTO;
import com.yf.exam.modules.user.cert.dto.UserCertDetailDTO;
import com.yf.exam.modules.user.cert.dto.request.UserCertReqDTO;
import com.yf.exam.modules.user.cert.entity.UserCert;

import java.util.List;

/**
 * 用户证书服务接口
 */
public interface UserCertService extends IService<UserCert> {



    /**
     * 为考试通过的用户生成证书
     * @param examId 考试ID
     */
    void generateCertificatesForPassedUsers(String examId);

    /**
     * 为指定用户生成证书（考试通过时调用）
     * @param userId 用户ID
     * @param examId 考试ID
     * @param paperId 试卷ID
     */
    void generateCertificateForUser(String userId, String examId, String paperId);



    /**
     * 手动生成指定用户的证书
     * @param userId 用户ID
     * @param examId 考试ID
     * @param certId 证书模板ID
     * @return 证书文件路径
     */
    String manualGenerateCertificate(String userId, String examId, String certId);

    /**
     * 分页查询用户证书详情
     * @param reqDTO 分页查询参数
     * @return 分页结果
     */
    IPage<UserCertDetailDTO> getUserCertDetailPage(PagingReqDTO<UserCertReqDTO> reqDTO);

    /**
     * 查询用户证书详情列表
     * @param userId 用户ID
     * @param examId 考试ID
     * @return 证书详情列表
     */
    List<UserCertDetailDTO> getUserCertDetailList(String userId, String examId);

    /**
     * 删除用户证书
     * @param userId 用户ID
     * @param examId 考试ID
     * @param certId 证书模板ID
     * @return 是否删除成功
     */
    boolean deleteUserCertificate(String userId, String examId, String certId);

    /**
     * 批量删除指定考试的所有证书
     * @param examId 考试ID
     * @return 删除的证书数量
     */
    int deleteAllCertificatesByExam(String examId);
    
}